home *** CD-ROM | disk | FTP | other *** search
- unit Gentable;
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, Menus, DB, DBTables, StdCtrls, Buttons, Grids, DBGrids,
- FileCtrl, IniFiles, ExtCtrls;
-
- type
- TBuildTableForm = class(TForm)
- L_SourceDD: TLabel;
- L_DDname: TLabel;
- ProgressWindow: TMemo;
- Label2: TLabel;
- TargetEditBox: TEdit;
- OpenDialog1: TOpenDialog;
- Database1: TDatabase;
- Table1: TTable;
- TargetDataSource: TDataSource;
- TargetQuery: TQuery;
- B_Target: TBitBtn;
- TargetListBox: TListBox;
- Label7: TLabel;
- FileListBox1: TFileListBox;
- MainMenu1: TMainMenu;
- Target1: TMenuItem;
- NewTarget1: TMenuItem;
- OldTarget1: TMenuItem;
- N1: TMenuItem;
- Exit1: TMenuItem;
- Build1: TMenuItem;
- Emptydatabase1: TMenuItem;
- Unitsourcecode1: TMenuItem;
- DictStatus: TMemo;
- Bevel1: TBevel;
- procedure FormActivate(Sender: TObject);
- procedure TargetEditBoxKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure TargetListBoxClick(Sender: TObject);
- procedure TargetListBoxExit(Sender: TObject);
- procedure B_TargetClick(Sender: TObject);
- procedure TargetEditBoxClick(Sender: TObject);
- procedure NewTarget1Click(Sender: TObject);
- procedure OldTarget1Click(Sender: TObject);
- procedure Exit1Click(Sender: TObject);
- procedure Emptydatabase1Click(Sender: TObject);
- private
- FiniFile : TiniFile;
- FValidTarget : boolean;
- Procedure ReadIniFile;
- Procedure ChangeIniFile;
- Procedure InitTargetStuff;
- Procedure SetUpTarget(Sender: Tobject; whichone : integer);
- procedure SelectTarget(Sender: TObject);
- public
- { Public declarations }
- end;
-
- var
- BuildTableForm: TBuildTableForm;
-
- implementation
- uses mainmenu, utils, dirdlg, dbutils, mystrng;
- {$R *.DFM}
-
- const
- gtNoTargetMsg = 'No target. Click here to create or select.';
-
- procedure TBuildTableForm.InitTargetStuff;
- begin
- TargetEditBox.text := gtNoTargetMsg;
- FileListBox1.items.clear;
- end;
- Procedure TBuildTableForm.ReadIniFile;
- var tmpstr : string;
- begin
- FIniFile := TiniFile.Create(appname+'.ini');
- FiniFile.ReadSection('Targets', targetListBox.items);
- if targetListBox.items.count = 0
- then InitTargetStuff
- else targetEditBox.text := targetListBox.items[0];
- FiniFile.free;
- end;
-
- Procedure TBuildTableForm.ChangeIniFile;
- var i : integer;
- begin
- FIniFile := TiniFile.Create(appname+'.ini');
- FiniFile.eraseSection('Targets');
- for i := 0 to targetListBox.Items.count -1 do
- FiniFile.writeString('Targets', targetListBox.items[i], '1');
- FiniFile.free;
- end;
-
-
- procedure TBuildTableForm.FormActivate(Sender: TObject);
- var tmpstr : string;
- begin
- L_ddname.caption := main.DDEditBox.text;
- ReadIniFile;
- ProgressWindow.lines.clear;
- DictStatus.lines.clear;
- DictStatus.lines := main.LB_tables.items;
- tmpstr := 'This dictionary contains the following ';
- if main.lb_tables.items.count = 1
- then tmpstr := tmpstr + 'table:'
- else tmpstr := tmpstr + IntToStr(main.lb_tables.items.count)+' tables:';
- DictStatus.lines.insert(0,tmpstr);
- show;
- end;
-
- procedure TBuildTableForm.Emptydatabase1Click(Sender: TObject);
- var tablenum : integer;
- begin
- main.TargetDatabase.close;
- main.TargetDatabase.Params.clear;
- main.TargetDatabase.Params.add('PATH='+TargetEditBox.text);
- main.TargetDataBase.open;
- for tablenum := 0 to main.lb_tables.items.count - 1 do begin
- main.targetDataBase.close;
- main.targetTable.free;
- main.targetDataBase.open;
- main.targetTable := ttable.create(self);
- main.targetTable.databasename := main.targetDatabase.databasename;
- main.targetTable.tablename := main.lb_tables.items[tablenum];
- main.TargetTable.TableType := ttDbase;
- if DictCtrl.BuildEmptyTable(main.targetTable, main.lb_tables.items[tablenum])
- then messagedlg('OK', mtinformation, [mbOK],0)
- else messagedlg('not ok', mtinformation, [mbOK],0);
- end;
- end;
-
- (*
- var tables, fields : tstringlist;
- tablenum : integer;
- thistable : string;
- tablefound : boolean;
- fieldname : string[10];
- fieldtype : tFieldType;
- fieldlen : integer;
- indexed : boolean;
- begin
- main.SourceDataBase.close;
- main.SourceDatabase.Params.clear;
- main.SourceDatabase.Params.Add('PATH='+main.DDPathName);
- main.SourceDatabase.open;
- progressWindow.lines.add('Dictionary open');
- main.TargetDatabase.close;
- main.TargetDatabase.Params.clear;
- main.TargetDatabase.Params.add('PATH='+TargetEditBox.text);
- main.TargetDataBase.open;
- with Main.DictQuery do begin
- databasename := main.SourceDataBase.databasename;
- close;
- sql.clear;
- thistable := 'SELECT * FROM '+main.DDTablename+' where TABLE_NAME = :tableid';
- sql.add(thistable);
- prepare;
- {Iterate through the tables, build each database}
- for tablenum := 0 to main.lb_tables.items.count - 1 do begin
- main.targetTable := ttable.create(self);
- main.targetTable.databasename := main.targetDatabase.databasename;
- main.targetTable.tablename := main.lb_tables.items[tablenum];
- main.TargetTable.TableType := ttDbase;
- progressWindow.lines.add('Building table '+main.lb_tables.items[tablenum]);
- main.TargetTable.close;
- close;
- ParamByName('tableid').asString := main.lb_tables.items[tablenum];
- open;
- first;
- with main.TargetTable.FieldDefs do begin
- clear;
- while not EOF do begin
- fieldname := findfield('FIELD_NAME').text;
- fieldlen := findfield('FIELD_LEN').asInteger;
- for fieldtype := ftunknown to ftgraphic do
- if upper(findfield('FIELD_TYPE').text) = upper(FieldTypeStr[fieldtype])
- then break;
- case fieldtype of
- ftSmallint ,
- ftInteger ,
- ftWord ,
- ftBoolean ,
- ftFloat ,
- ftCurrency ,
- ftBCD ,
- ftDate ,
- ftTime ,
- ftDateTime : FieldLen := 0;
- end; {Case}
- indexed := findfield('FIELD_IDX').asBoolean;
- add(fieldname, fieldtype, fieldlen, indexed);
- if indexed
- then main.targettable.IndexDefs.add(fieldname, fieldname, [ixPrimary, ixUnique]);
- next;
- end; { with while DictQuery not EOF}
- end; { with targettable.fielddefs}
- main.TargetTable.CreateTable;
- end; { for tablenum through tables stringlist}
- progressWindow.lines.add('Done.');
- end; {with main.DictQuery}
- main.DictQuery.close;
- main.sourcedatabase.close;
- main.targetDatabase.close;
- end;
- *)
-
- procedure TbuildTableForm.TargetEditBoxKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if key = VK_RETURN
- then SelectTarget(Sender);
- end;
-
- Procedure TbuildTableForm.SetUpTarget(Sender: Tobject; whichone : integer);
- var Dir: string;
- i, doserr : integer;
- found : boolean;
- begin
- ProgressWindow.clear;
- if length(targetListBox.items[whichone]) = 0
- then begin
- fValidTarget := false;
- initTargetStuff;
- exit;
- end;
- dir := addBackSlash(TargetListBox.items[whichone]);
- if DirectoryExists(dir)
- then begin
- found := false;
- for i := 0 to main.lb_tables.items.count -1 do
- if fileexists(dir+main.lb_tables.items[i]+'.dbf')
- then begin
- found := true;
- break;
- end;
- if found {we found one of the tables in the current dictionary}
- then begin
- ProgressWindow.lines.add('Table '+main.lb_tables.items[i]+' exists in ');
- ProgressWindow.lines.add(dir+'.');
- ProgressWindow.lines.add('tables will be overwritten upon generation');
- TargetListBox.items.exchange(0,whichone);
- TargetEditBox.text := TargetListBox.items[0];
- FValidTarget := true;
- end
- else begin {dir exists and is ready}
- ProgressWindow.lines.add('Target ' +dir+' ready.');
- TargetListBox.items.exchange(0,whichone);
- TargetEditBox.text := TargetListBox.items[0];
- FValidTarget := true;
- end;
- end {of if directory exists}
- else {dir didn't exist}
- if fileexists(stripBackSlash(dir))
- then begin
- ProgressWindow.lines.add('Cannot create target directory');
- ProgressWindow.lines.add(dir);
- ProgressWindow.lines.add('Because it is an existing file.');
- TargetEditBox.text := '';
- FValidTarget := False;
- end
- else begin
- {$I-}
- MkDir(stripBackSlash(dir));
- {$I+}
- Doserr := ioresult;
- if DosErr = 0
- then begin
- TargetEditBox.text := dir;
- FValidTarget := true;
- ProgressWindow.lines.add('Created target directory '+dir);
- end
- else begin
- FValidTarget := false;
- ProgressWindow.lines.add('Could not create target directory');
- ProgressWindow.lines.add(dir);
- ProgressWindow.lines.add('DOS error '+ intToStr(doserr));
- end;
- end;
- end;
-
-
- procedure TbuildTableForm.SelectTarget(Sender: TObject);
- var i : integer;
- found : boolean;
- tmpstr : string;
- begin
- with TargetListBox do
- begin
- found := false;
- for i := 0 to items.count -1 do
- if TargetEditBox.text = items[i]
- then begin
- found := true;
- break;
- end;
- if found
- then SetUpTarget(sender, i)
- else begin
- items.add(TargetEditBox.text);
- SetUpTarget(sender, items.count -1);
- end;
- hide;
- end;
- if fValidTarget
- then begin
- i := Ord(upcase(targetEditBox.text[1])) - ord('A')+1;
- ProgressWindow.lines.add('Disk Space available: '+ IKMGB(diskfree(i)));
- FileListBox1.directory := TargetEditBox.text;
- end
- else InitTargetStuff;
- end;
-
- procedure TbuildTableForm.TargetListBoxClick(Sender: TObject);
- begin
- TargetEditBox.text := TargetListBox.items[TargetListBox.itemindex];
- SelectTarget(sender);
- end;
-
- procedure TbuildTableForm.B_TargetClick(Sender: TObject);
- begin
- TargetListBox.show;
- end;
-
- procedure TbuildTableForm.TargetListBoxExit(Sender: TObject);
- begin
- TargetListBox.Hide;
- end;
-
- procedure TBuildTableForm.TargetEditBoxClick(Sender: TObject);
- begin
- if TargetEditBox.text = gtNoTargetMsg
- then TargetEditBox.text := '';
- TargetEditBox.text := ChooseDirectory('Select Target Directory', TargetEditBox.text);
- SelectTarget(sender);
- targetListBox.hide;
- end;
-
- procedure TBuildTableForm.NewTarget1Click(Sender: TObject);
- begin
- if TargetEditBox.text = gtNoTargetMsg
- then TargetEditBox.text := '';
- TargetEditBox.text := ChooseDirectory('Select Target Directory', TargetEditBox.text);
- SelectTarget(sender);
- targetListBox.hide;
- { if TargetEditBox.text = gtNoTargetMsg
- then tgtDirDlg.l_directory.caption := ''
- else tgtDirDlg.l_directory.caption := TargetEditBox.text;
- if tgtDirDlg.showmodal = mrOK
- then TargetEditBox.text := tgtDirDlg.l_directory.caption;
- SelectTarget(sender);}
- end;
-
- procedure TBuildTableForm.OldTarget1Click(Sender: TObject);
- begin
- TargetListBox.show;
- end;
-
- procedure TBuildTableForm.Exit1Click(Sender: TObject);
- begin
- close;
- end;
-
-
- end.
-